<?php

use S\WeChat;
use S\WeChat\Util\Url;
use S\Response;

class Controller_Demo extends \Modules\Wechat\Controllers\OAuthCallback
{

    protected function beforeParams()
    {
    }

    protected function beforeAction()
    {
        Response::setFormatter(Response::FORMAT_PLAIN);

        /**
         * 所有通过微信访问且需要获取微信用户信息的URL,必须携带公众号这个参数.
         * 生成URL可以用\S\WeChat\Util\Url::build()方法.
         *
         * @var string $official_account
         */
        $official_account = Url::getOfficialAccount();

        //设置OAuth授权的scope为snsapi_base:就是静默授权,用户无感知.
        WeChat::app($official_account)->oauth->scopes(['snsapi_base']);
    }

    /**
     * 当用户授权仍然有效时
     *
     * @param string $official_account 请求URL中携带的公众号的微信号
     * @param string $user_open_id     用户的OpenID
     * @param string $user_union_id    用户的UnionID:仅当多个公众号绑定到一起时才有
     *
     * @return string
     */
    protected function onAuthorizationState($official_account, $user_open_id, $user_union_id = '')
    {
        $WeChatApp = WeChat::app($official_account);
        $userinfo  = $WeChatApp->user->get($user_open_id);
        if (!$userinfo['subscribe']) {
            return '请先关注';
        }
        return '授权仍然有效';
    }

    /**
     * 单用户已(同意)授权是执行
     *
     * @param string                   $official_account 请求URL中携带的公众号的微信号
     * @param \Overtrue\Socialite\User $User
     *
     * @return string
     */
    protected function onAuthorized($official_account, \Overtrue\Socialite\User $User)
    {
        return '用户已授权';
    }


    /**
     * 当用户未(拒绝)授权时执行
     *
     * @param string $official_account 请求URL中携带的公众号的微信号
     * @param string $state
     *
     * @return string
     */
    protected function onUnauthorized($official_account, $state)
    {
        return '用户未授权';
    }


}
